package top.buluoluo.userservice.dto.request;

import jakarta.validation.constraints.Email;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.Pattern;
import jakarta.validation.constraints.Size;
import lombok.Data;

@Data
public class RegisterRequest {

    /**
     * 用户名/账号
     * 必填，长度2-20字符，支持中文、字母、数字和下划线
     */
    @NotBlank(message = "用户名不能为空")
    @Size(min = 2, max = 20, message = "用户名长度必须在2-20个字符之间")
    @Pattern(regexp = "^[\\u4e00-\\u9fa5a-zA-Z0-9_]+$", message = "用户名只能包含中文、字母、数字和下划线")
    private String username;

    /**
     * 密码
     * 必填，长度至少8字符，推荐包含字母、数字和特殊字符
     */
    @NotBlank(message = "密码不能为空")
    @Size(min = 8, message = "密码长度至少8个字符")
    @Pattern(
            regexp = "^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)[a-zA-Z\\d]{8,}$",
            message = "密码必须包含大小写字母和数字"
    )
    private String password;

    /**
     * 邮箱
     * 必填，需符合邮箱格式，作为登录账号
     */
    @NotBlank(message = "邮箱不能为空")
    @Email(message = "邮箱格式不正确")
    private String email;

    /**
     * 手机号
     * 必填，需符合手机号格式，作为备用登录方式
     */
    @NotBlank(message = "手机号不能为空")
    @Pattern(regexp = "^1[3-9]\\d{9}$", message = "手机号格式不正确")
    private String phone;

    /**
     * 确认密码
     * 必填，需与密码一致
     */
    @NotBlank(message = "确认密码不能为空")
    private String confirmPassword;
}
